home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / disk utilities / backup / backup_restore / backup_src_v3.20.lha / FileDisplay.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-01-28  |  4.2 KB  |  220 lines

  1. // FileDisplay.c
  2. // 27 Jan 1996 20:38:14
  3.  
  4. #ifndef    BACKUP_INCLUDE
  5. #include "IncludeAll.c"
  6. #endif
  7. #include "Backup.h"
  8. #include "Backup_Proto.h"
  9. #include "BackupStrings.h"
  10.  
  11.  
  12. // aus FileSelect.c
  13. extern struct TextFont *myFont;
  14.  
  15. // aus Backup.c
  16. extern struct Window *aktWindow;
  17.  
  18.  
  19. struct IBox FileDisplayPos;
  20. static short FileDisplayLines;            // Anzahl Zeilen im FileDisplay
  21. static short FileDisplayColumns;        // Anzahl Spalten im FileDisplay
  22.  
  23. static unsigned short ShortPathLen;        // Länge des gekürzten aktuellen Pfadnamens
  24.  
  25. static char **FileDisplayLineArray;
  26.  
  27. static BOOL FileDisplayOpen = FALSE;
  28.  
  29.  
  30. void SetupFileDisplay(void)
  31. {
  32.     FileDisplayLines = (FileDisplayPos.Height - 4) / myFont->tf_YSize;
  33.     FileDisplayColumns = (FileDisplayPos.Width - 4) / myFont->tf_XSize;
  34.  
  35.     if (NULL == FileDisplayLineArray)
  36.         {
  37.         FileDisplayLineArray = malloc(FileDisplayLines * sizeof(char *));
  38.         if (FileDisplayLineArray)
  39.             {
  40.             short n;
  41.  
  42.             for (n=0; n<FileDisplayLines; n++)
  43.                 {
  44.                 FileDisplayLineArray[n] = calloc(FileDisplayColumns + 1, 1);
  45.                 if (NULL == FileDisplayLineArray[n])
  46.                     {
  47.                     alarm(GetString(MSG_OUTOFMEMORY), __FUNC__, "FileDisplayLineArray[n]", FileDisplayColumns + 1);
  48.                     myabort(10);
  49.                     }
  50.                 }
  51.             }
  52.         else
  53.             {
  54.             alarm(GetString(MSG_OUTOFMEMORY), __FUNC__, "FileDisplayLineArray", FileDisplayLines * sizeof(char *));
  55.             myabort(10);
  56.             }
  57.         }
  58.  
  59. }
  60.  
  61.  
  62. void OpenFileDisplay(void)
  63. {
  64.     if (aktWindow)
  65.         {
  66.         char hilf[90];
  67.  
  68.         CDOpen(aktWindow);
  69.  
  70.         FileDisplayOpen = TRUE;
  71.  
  72.         CDPutStr(CSI "0 p");        // Cursor aus
  73.         CDPutStr(CSI "?7l");        // Autowrap aus
  74.  
  75.         sprintf(hilf, CSI "%dy", FileDisplayPos.Top + 2);
  76.         CDPutStr(hilf);            // Top Offset
  77.  
  78.         sprintf(hilf, CSI "%dx", FileDisplayPos.Left + 2);
  79.         CDPutStr(hilf);            // Left Offset
  80.  
  81.         sprintf(hilf, CSI "%du", FileDisplayColumns );
  82.         CDPutStr(hilf);            // Line Length
  83.  
  84.         sprintf(hilf, CSI "%dt",  FileDisplayLines);
  85.         CDPutStr(hilf);            // Page Length
  86.  
  87.         CDPutStr(CSI "31;42;>2m");    // Text schwarz (1) auf weiß (2)
  88.         }
  89. }
  90.  
  91.  
  92. void CloseFileDisplay(void)
  93. {
  94.     FileDisplayOpen = FALSE;
  95. }
  96.  
  97.  
  98. void CleanupFileDisplay(void)
  99. {
  100.     if (FileDisplayLineArray)
  101.         {
  102.         short n;
  103.  
  104.         for (n=0; n<FileDisplayLines; n++)
  105.             {
  106.             if (FileDisplayLineArray[n])
  107.                 {
  108.                 free(FileDisplayLineArray[n]);
  109.                 FileDisplayLineArray[n] = NULL;
  110.                 }
  111.             }
  112.  
  113.         free(FileDisplayLineArray);
  114.         FileDisplayLineArray = NULL;
  115.         }
  116. }
  117.  
  118.  
  119. void DisplayNewFile(const char *FileName)
  120. {
  121.     ClearFileName();
  122.     MaxPutStr(FileName, FileDisplayColumns - ShortPathLen);
  123. }
  124.  
  125.  
  126. // Zeichenausgabe mit CDPutStr, max. maxlen Zeichen
  127. void MaxPutStr(const char *text, size_t maxlen)
  128. {
  129.     size_t len;
  130.  
  131.     ASSERT_VALID(text);
  132.  
  133.     len = strlen(text);
  134.     if (len <= maxlen)
  135.         {
  136.         if (FileDisplayOpen)
  137.             CDPutStr(text);
  138.  
  139.         strncat(FileDisplayLineArray[FileDisplayLines-1], text, 
  140.             FileDisplayColumns - strlen(FileDisplayLineArray[FileDisplayLines-1]));
  141.         }
  142.     else
  143.         {
  144.         if (FileDisplayOpen)
  145.             {
  146.             CDPutStrLength(text, maxlen);
  147.             CDPutStr("»");
  148.             }
  149.  
  150.         strncat(FileDisplayLineArray[FileDisplayLines-1], text, 
  151.             FileDisplayColumns - strlen(FileDisplayLineArray[FileDisplayLines-1]) - 1);
  152.         strcat(FileDisplayLineArray[FileDisplayLines-1], "»");
  153.         }
  154. }
  155.  
  156.  
  157. // Cursorpositionierung auf (ULINE, ShortPathLen) mit anschließendem ClrEOL
  158. void ClearFileName(void)
  159. {
  160.     if (FileDisplayOpen)
  161.         {
  162.         char xtext[18];
  163.  
  164.         sprintf(xtext, "\x9b" "13;%df", ShortPathLen+1);
  165.         CDPutStr(xtext);
  166.         ConsoleClrEol();
  167.         }
  168.  
  169.     FileDisplayLineArray[FileDisplayLines-1][ShortPathLen] = '\0';
  170. }
  171.  
  172.  
  173. void FDDisplayNewDir(const char *NewPath)
  174. {
  175.     const char *NewDirName;
  176.     short n;
  177.     char *lp;
  178.  
  179.     // Letzten Filenamen löschen
  180.     ClearFileName();
  181.  
  182.     if (FileDisplayOpen)
  183.         {
  184.         // Namens-Anzeige scrollen
  185.         ConsoleScrollUp();
  186.         CDPutStr("\r");
  187.         }
  188.  
  189.     // FileDisplayLineArray scrollen, dabei nur die String-Pointer verschieben
  190.     lp = FileDisplayLineArray[0];
  191.     for (n=0; n<FileDisplayLines-1; n++)
  192.         {
  193.         FileDisplayLineArray[n] = FileDisplayLineArray[n+1];
  194.         }
  195.     FileDisplayLineArray[FileDisplayLines-1] = lp;
  196.  
  197.     strcpy(FileDisplayLineArray[FileDisplayLines-1], "");
  198.  
  199.     NewDirName = ShortFileName(NewPath, FileDisplayColumns-15);
  200.     ShortPathLen = strlen(NewDirName);
  201.  
  202.     MaxPutStr(NewDirName, FileDisplayColumns);
  203. }
  204.  
  205.  
  206. void RebuildFileDisplay(void)
  207. {
  208.     if (FileDisplayOpen)
  209.         {
  210.         short n;
  211.  
  212.         for (n=0; n<FileDisplayLines; n++)
  213.             {
  214.             CDPutStr(FileDisplayLineArray[n]);
  215.             if (n < FileDisplayLines - 1)
  216.                 CDPutStr("\r\n");
  217.             }
  218.         }
  219. }
  220.